package kgame5.kgui.kcomp.compajax {
/**
 * @author kangkai
 * 
 * //这个就是一个定位器，用来固定位置用的，
		
		mc_realBody
		
		//mc_face就是一个界面，拖动移动的时候他跟着动，但是真正的目标位置是在mc_realBody
		mc_face
			mc_face_dragArea
			mc_face_bg
 * 
 */
import flash.display.*;
import flash.events.*;
import flash.geom.*;

import gs.TweenLite;

import kgame5.kutil.*;

public class AJAXItem extends EventDispatcher{
	static const DUR:Number=0.5;
	
	static var TestID:int=0;//自己的ID，测试用的
	
	///通知外部自己高度变化了
	//public static const EVENTTYPE_HEIGHT_CHANGED:String="EVENTTYPE_HEIGHT_CHANGED";
	//________________________Property__________________________
	//这2个mc都是在ajaxTable.mc里的
	
	private var mc_realBody:MovieClip;//自己真正是实体,这个用来表示自己所在的位置的
	
	protected var mc_face:MovieClip,//界面,由mc_dragArea（拖动区域）和mc_bg组成
					mc_face_dragArea:MovieClip,
					mc_face_bg:MovieClip;
				
	public var masterList:AJAXList;
	public var masterTable:AJAXTable;
	
	private var height:int=80;
	
	//________________________Method________________________
	public function AJAXItem(sFaceLinkID:String,sRealBodyLinkID:String="MyMc_realBody",rect_faceBGScale9Grid:Rectangle=null){
		
		//这个就是一个定位器，用来固定位置用的，
		mc_realBody=Util.AttachMC(sRealBodyLinkID);
		mc_realBody.visible=false;
		
		//mc_face就是一个界面，拖动移动的时候他跟着动，但是真正的目标位置是在mc_realBody
		mc_face=Util.AttachMC(sFaceLinkID);
			mc_face_dragArea=mc_face.mc_dragArea;
			mc_face_bg=mc_face.mc_bg;
		
		
		//--缩放
		mc_face_bg.scale9Grid=rect_faceBGScale9Grid;
		
		
		mc_face_dragArea.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
		
		//realBody的大小要设置的和face开始的时候一样大
		mc_realBody.width=mc_face.width;
		mc_realBody.height=mc_face.height;
		
		changeHeight(mc_face.height);//开始的时候设置好高度就
	}
	
	public function onAddedToTable(p_masterTable:AJAXTable){
		masterTable=p_masterTable;
	}
	
	public function onAddedToList(p_masterList:AJAXList){
		masterList=p_masterList;
	}
	
	public function getFaceMC():MovieClip{
		return mc_face;
	}
	
	public function getRealBodyMC():MovieClip{
		return mc_realBody;
	}
	//自己变化高度
	public function changeHeight(p_height:int){
		height=p_height;
		mc_face_bg.height=height;
		mc_realBody.height=height;
		
		//通知masterList说自己改变了高度,masterList要做指挥位置的调整
		if(masterList!=null){//因为changeHeight是会在初始化的时候使用的
			masterList.onItemChangeHeight(this);
		}
	}
	public function getHeight():int{
		return height;
	}
	
	//******************* 拖动相关的
	
	private function onMouseDown(e:MouseEvent){
		masterTable.startDragItem(this);
	}
	private var bFloating:Boolean=false;
	//被命令启动拖拽
	public function startDrag(){
		T.p("startDrag");
		mc_face.startDrag();
		
		bFloating=true;
		
		mc_face_bg.gotoAndStop(2);//拖动的face 的背景要有个颜色变化
		
		mc_realBody.visible=true;//realBody显示目标框
		
		//重新开始缓动动画前，缓动要清除掉
		killMoveFace();
	}
	public function stopDrag(){
		T.p("stopDrag!!");
		mc_face.stopDrag();//被通知停止拖拽
		
		bFloating=false;
		//
		mc_face_bg.gotoAndStop(1);
		
		mc_realBody.visible=false;//不显示目标框
		
		//--自己在停止拖拽之后移动底到目标,这个很容易丢掉，要注意
		moveFace();
	}
	
	//注意最好处理掉多次移动的 问题，节约用电了就当,这个是个界面
	public function moveFace(){
		if(bFloating==false){//漂浮的 时候是不用真正移动到目标位置的,等拖拽完毕后再移动
			TweenLite.to(mc_face,DUR,{x:mc_realBody.x,y:mc_realBody.y});
		}
	}
	//这个很有用，因为当还没移动到指定位置的时候由拖拽，是个比较不好的事情啊 ，需要在启动新的拖拽的 时候吧动画干掉
	public function killMoveFace(){
		TweenLite.killTweensOf(mc_face);
	}
	//真正的要放在的地方，做缓动都要这样做
	public function placeBody(x:int,y:int){
		mc_realBody.x=x;
		mc_realBody.y=y;
	}
	//把face直接放到body的位置 
	public function placeFace(){
		mc_face.x=mc_realBody.x;
		mc_face.y=mc_realBody.y;
	}
	//============实验增加或者减少条目term===========
	public function testTerm(){
		mc_face.btn_add.addEventListener(MouseEvent.CLICK,onAddTerm);
		mc_face.btn_remove.addEventListener(MouseEvent.CLICK,onRemoveTerm);
	}
	private function onAddTerm(e:MouseEvent){
		changeHeight(height+30);
	}

	private function onRemoveTerm(e:MouseEvent){
		changeHeight(height-30);
	}
	
	//===========
	/*
	//通知外部自己高度变化
	private function notifyHeightChanged(){
		this.dispatchEvent(new KEvent(EVENTTYPE_HEIGHT_CHANGED));
	}
	//*/
}//end of class
}
